from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import os

# 数据库文件路径
DATABASE_URL = "sqlite:///./todos.db"

# 创建数据库引擎
# SQLite 特殊配置：check_same_thread=False 允许多线程访问
engine = create_engine(
    DATABASE_URL, 
    connect_args={"check_same_thread": False},
    echo=False  # 设置为 True 可以在控制台看到 SQL 语句
)

# 创建会话工厂
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 创建模型基类
Base = declarative_base()

# 数据库依赖注入函数
def get_db():
    """
    获取数据库会话的依赖注入函数
    使用 yield 确保会话在请求结束后正确关闭
    """
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

# 创建所有表
def create_tables():
    """
    创建数据库中的所有表
    """
    Base.metadata.create_all(bind=engine)
    print("✅ 数据库表创建完成")

# 删除所有表（用于重置）
def drop_tables():
    """
    删除数据库中的所有表
    """
    Base.metadata.drop_all(bind=engine)
    print("🗑️ 数据库表已删除")

# 重置数据库
def reset_database():
    """
    重置数据库：删除所有表然后重新创建
    """
    drop_tables()
    create_tables()